// 页面导出为pdf格式
import html2Canvas from "html2canvas";
import jsPDF from "jspdf";
import {ElMessage} from "element-plus";

const htmlToPdf = {
    getPdf(title, id) {
        html2Canvas(document.querySelector(id), {
            allowTaint: false,
            taintTest: false,
            logging: false,
            useCORS: true,
            dpi: window.devicePixelRatio * 4, //将分辨率提高到特定的DPI 提高四倍
            scale: 4, //按比例增加分辨率
        }).then((canvas) => {
            var pdf = new jsPDF("p", "mm", "a4"); //A4纸，纵向
            var ctx = canvas.getContext("2d"),
                a4w = 190,
                a4h = 272, //A4大小，210mm x 297mm，四边各保留10mm的边距，显示区域190x277
                imgHeight = Math.floor((a4h * canvas.width) / a4w), //按A4显示比例换算一页图像的像素高度
                renderedHeight = 0;

            while (renderedHeight < canvas.height) {
                var page = document.createElement("canvas");
                page.width = canvas.width;
                page.height = Math.min(imgHeight, canvas.height - renderedHeight); //可能内容不足一页

                //用getImageData剪裁指定区域，并画到前面创建的canvas对象中
                page
                    .getContext("2d")
                    .putImageData(
                        ctx.getImageData(
                            0,
                            renderedHeight,
                            canvas.width,
                            Math.min(imgHeight, canvas.height - renderedHeight)
                        ),
                        0,
                        0
                    );


                pdf.addImage(
                    page.toDataURL("image/jpeg", 1.0),
                    "JPEG",
                    10,
                    10,
                    a4w,
                    Math.min(a4h, (a4w * page.height) / page.width)
                ); //添加图像到页面，保留10mm边距

                renderedHeight += imgHeight;
                if (renderedHeight < canvas.height) {
                    pdf.addPage(); //如果后面还有内容，添加一个空页
                }
                // delete page;
            }
            pdf.save(title + ".pdf");
        });
    },

    getPdfPage(title,  pageClass) {
        const loadingMessage = ElMessage({
            message: '正在下载中...',
            type: 'info',
            duration: 0, // 设置为0表示不自动关闭
        });

        let pdf = new jsPDF("p", "mm", "a4"); // A4纸，纵向
        let pageDocumentList = document.getElementsByClassName(pageClass);
        console.log("分页列表", pageDocumentList);

        const handlePagePdf=async ()=>{
            for(let index=0;index<pageDocumentList.length;index++){
                const item=pageDocumentList[index]
                const canvas=await html2Canvas(item, {
                    allowTaint: false,
                    taintTest: false,
                    logging: false,
                    useCORS: true,
                    dpi: window.devicePixelRatio * 4, //将分辨率提高到特定的DPI 提高四倍
                    scale: 4, //按比例增加分辨率
                });
                let ctx = canvas.getContext("2d"),
                    a4w = 190,
                    a4h = 272, //A4大小，210mm x 297mm，四边各保留10mm的边距，显示区域190x277
                    imgHeight = Math.floor((a4h * canvas.width) / a4w), //按A4显示比例换算一页图像的像素高度
                    renderedHeight = 0;



                while (renderedHeight < canvas.height) {
                    let page = document.createElement("canvas");
                    page.width = canvas.width;
                    page.height = Math.min(imgHeight, canvas.height - renderedHeight); //可能内容不足一页

                    //用getImageData剪裁指定区域，并画到前面创建的canvas对象中
                    page
                        .getContext("2d")
                        .putImageData(
                            ctx.getImageData(
                                0,
                                renderedHeight,
                                canvas.width,
                                Math.min(imgHeight, canvas.height - renderedHeight)
                            ),
                            0,
                            0
                        );


                    pdf.addImage(
                        page.toDataURL("image/jpeg", 1.0),
                        "JPEG",
                        10,
                        10,
                        a4w,
                        Math.min(a4h, (a4w * page.height) / page.width)
                    ); //添加图像到页面，保留10mm边距

                    renderedHeight += imgHeight;
                    if (renderedHeight < canvas.height) {
                        pdf.addPage(); //如果后面还有内容，添加一个空页
                    }
                    // delete page;
                }

                // 如果后面还有页面，添加一个空页
                if (index < pageDocumentList.length - 1) {
                    pdf.addPage();
                }
            }
            // 所有页面处理完成后保存 PDF
            pdf.save(title + ".pdf");

            loadingMessage.close(); // 手动关闭加载中的消息
            ElMessage({
                message: '下载完成',
                type: 'success',
                duration: 2000, // 2秒后自动关闭
            });
        }
        // handlePagePdf()
        // 使用 setTimeout 延迟生成 PDF，确保报告内容完全加载
        setTimeout(() => {
            handlePagePdf();
        }, 3000); // 延迟1秒，可以根据实际情况调整延迟时间

    }
};

export default htmlToPdf;

